#include<stdio.h>
//int main()
//{
//	int a[5] = { 1,2,3,4,5 };
//	int* ptr = (int*)(&a + 1);    //&a,取出整个数组的地址，＋1，则跳过整个数组，指向数组后一个地址。&a的类型为 int(* )[]
//	printf("%d,%d", *(a + 1), *(ptr-1));   //对于*(a+1),a为首元素地址，加1则指向第二个元素的地址；解引用得2
//	                                      ///对于*(ptr+1),由于ptr指向数组后第一个地址，而ptr是int类型的指针，所以ptr-1
//	return 0;                              //向后跳过四个字节指向数组第五个元素的地址，解引用得5
//}



//int main()
//{
//	int arr[3][2] = { (0,1),(2,3),(4,5) };  //逗号表达式(左 ,右),先运算左再算右，返回值为右边的结果。
//	int* p;                                 //所以(0，1)=1,(2,3)=3,(4,5)=5      该二维数组为：1  3
//	p = arr[0];        //arr[0]代表二维数组第一行的数组名，代表第一行的地址                //   5  0     
//	printf("%d", p[0]);                            //也是arr[0][0]的地址                   //0  0
//	return 0;             //p[0] 代表 *(p+0)等于*p,故结果为1
//}


int main()
{
	int arr[4] = { 1,2,3,4 };
	int* ptr1 = (int*)(&arr + 1);     //同第一题 地址加一，等于加4个字节，如从0x00 00 00 00变成0x00 00 00 04 地址  
	int* ptr2 = (int*)((int)arr + 1);  //arr为地址，将其强制转化为int类型，即将该地址转化成十进制的整数，该整数加一
	printf("%x", ptr1[-1]);  //ptr1[-1]等于 *(ptr1+(-1)),即从arr数组后往前跳过四个字节，指向元素4
	return 0;                        //
}